이스트캠프 Spring 퀴즈 4

📘 오늘 학습한 내용

1️⃣ JPA


📝 퀴즈

🧩 퀴즈 1

Q. JPA에서 기본 키(PK)를 자동으로 증가시키기 위해 사용하는 어노테이션은 무엇인가요?

📝 나의 답변:

@GeneratedValue(strategy=IDENTITY)

✅ 피드백:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

🧩 퀴즈 2

Q. @ManyToOne, @OneToMany와 같은 어노테이션은 주로 어떤 상황에서 사용되며, 각각 어떤 관계를 표현하나요?

📝 나의 답변:

두 테이블 간의 다대일, 일대다 관계를 표현할 때 사용한다.

✅ 피드백:

@ManyToOne -> N:1
@OneToMany -> 1:N
테이블 간의 FK 관계를 그대로 나타내고 싶을 때 사용한다.
컬럼 간의 관계를 명시적으로 표현할 때 사용한다.

🧩 퀴즈 3

Q. JPA에서 객체의 필드명과 DB의 컬럼명이 다를 경우 어떤 어노테이션을 사용해 매핑할 수 있나요?

📝 나의 답변:

@Column(name="columnName")

✅ 피드백:

@Column(name="columnName")

Java는 camelCase를 많이 사용하고
DB는 snake_case를 많이 사용하기에
Convention을 일치시킬 때 사용한다.

🧩 퀴즈 4

Q. Spring에서 DB와의 연결을 위해 사용하는 대표적인 JDBC 설정 속성 2가지를 서술하시오.

✅ 피드백:

1. URL
spring.datasource.url

2. 사용자 정보(이름, 비밀번호)
spring.datasource.username
spring.datasource.password

3. Driver 클래스
spring.datasource.driver-class-name

4. DDL 사용 방식
spring.jpa.hibernate.ddl-auto

5. connection pool
 hikari:
  maximum-pool-size: 10
  minimun-idle: 6
  idle-timeout: 600000  # (ms)
  max-lifetime: 1000000 # (ms)
  pool-name: MyHikari

🧩 퀴즈 5

Q. 아래와 같은 SQL JOIN 문을 객체지향적으로 ORM에서 표현할 수 있는 방식은?

SELECT posts.*, boards.name FROM posts
LEFT JOIN boards ON posts.board_id = boards.board_id
@Entity
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;
    private String content;

    @ManyToOne
    @JoinColumn(name = "board_id") // FK 컬럼명 지정
    private Board board;
}
@Entity
public class Board {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "board")
    private List<Post> posts = new ArrayList<>();
}

✅ 피드백:

Post post = postRepository.findById(1L).orElseThrow();

String boardName = post.getBoard().getName();